package cn.swing.ushare.comment.webapi.mapper;

import cn.swing.ushare.pojo.dto.CommentAddNewDTO;
import cn.swing.ushare.pojo.vo.ArticleCommentsVO;
import cn.swing.ushare.pojo.vo.CommentListVO;
import cn.swing.ushare.pojo.vo.CommentMessageVO;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.List;

@Repository //避免idea在自动装配时的误判错误
public interface CommentMapper {
    /**
     * 新增评论
     * @param comment
     * @return
     */
    Integer insertComment(CommentAddNewDTO comment);

    /**
     * 各个界面操作日志处理
     *
     * @param systemModule    操作模块
     * @param operationType   操作类型 删除 插入 更新...
     * @param operator        操作者
     * @param operationDetail 操作细节
     */
    void insertOperationLog(@Param("systemModule") String systemModule,
                            @Param("operationType") String operationType,
                            @Param("operator") String operator,
                            @Param("operationDetail") String operationDetail);

    Integer updateByIds(Integer[] ids);

    /**
     * 根据传过来的id删除评论
     *
     * @param ids 各评论的id
     * @return 受影响的行数
     */
    Integer deleteByIds(Integer[] ids);

    /**
     * 根据id查询state
     * @param id id
     * @return state
     */
    Integer selectStateById(Integer id);

    /**
     * 根据id查询昵称
     * @param id id
     * @return 昵称
     */
    String selectNicknameById(Integer id);

    /**
     * 返回所有评论列表
     *
     * @return 管理系统的评论
     */
    List<CommentListVO> list();

    /**
     * 返回根据状态查询回来的列表
     *
     * @param State 状态 1=正常 0=审核中
     * @return CommentListVO列表
     */
    List<CommentListVO> listByState(Integer State);

    /**
     * 根据nickname查询列表
     *
     * @param nickname 用户昵称
     * @return CommentListVO列表
     */
    List<CommentListVO> listByNickname(String nickname);

    /**
     * 根据文章ID获取评论列表
     *
     * @param id
     * @return
     */
    List<ArticleCommentsVO> getCommentListByArticleId(Integer id);

    /**
     * 根据文章ID获取文章的二级评论
     * @param id
     * @return
     */
    List<ArticleCommentsVO> getChildCommentListByArticleId(Integer id);


    /**
     * 根据用户ID查询他人对自己的回复信息
     * @param id
     * @return
     */
    List<CommentMessageVO> listCommentMessages(Integer id);


    /**
     * 根据用户ID获取其未读取的信息数量
     * @param id
     * @return
     */
    Integer getUnreadMessagesCounts(Integer id);


    /**
     * 根据用户ID，将所有消息标记为已读
     * @param id
     * @return
     */
    Integer markIsRead(Integer id);
}
